#ifndef _DibujoSVG_h
#define _DibujoSVG_h

#include "Lienzo.h"
#include <iostream>
#include <fstream>
#include <cfloat>
using namespace std;


/** \file DibujoSVG.h
 * \brief Clase DibujoSVG
 *
 * Definición de la clase
 * JAVIER ANTON DIAZ DNI:48629698Q
 * STANISLAV LITVINENKO DNI:02062226T
 */

/** \brief DibujoSVG se encarga del control de flujo del programa
 *
 * Esta clase contiene un lienzo sobre el que se trabaja, y contiene el método ejecutar, que inicia el proceso del programa.
 */
class DibujoSVG {
	public:
		/** \brief Variable estática const MIN_VALOR tipo float
		 *
		 * La utilizaremos para define el tamaño mínimo del lienzo.
		 */
		static const float MIN_VALOR = -32767.9999;

		/** \brief Variable estática const MAX_VALOR tipo float
		 *
		 * La utilizaremos para define el tamaño máximo del lienzo.
		 */
		static const float MAX_VALOR = 32767.9999;

		/** \brief Variable estática const ERR_VALOR tipo float
		 *
		 * La utilizaremos para definir una constante con un valor erróneo, para utilizar en nuestro programa.
		 */
		static const float ERR_VALOR = FLT_MAX;

		/** \brief Destructor de objetos DibujoSVG
		*
		* Se ejecuta cuando hace falta destruir un objeto.
		*
		* \return no devuelve nada
		*/
		~DibujoSVG();

		/** \brief Método getInstancia estático
		 *
		 *	getInstancia devuelve un puntero que apunta a la instancia de un objeto DibujoSVG, si esta no existe lo crea.
		 *
		 *	\return Devuelve un puntero con contenido tipo DibujoSVG
		 */
		static DibujoSVG* getInstancia();

		/** \brief setEntrada().
		*
		* Este método nos permite asignar a el atributo entrada del objeto DibujoSVG un string.
		* \param fichEntrada tipo string.
		* \return El método no devuelve nada.
		*/
		void setEntrada(string);

		/** \brief setSalida().
		*
		* Este método nos permite asignar a el atributo salida del objeto DibujoSVG un string
		* \param fichSalida tipo string.
		* \return El método no devuelve nada.
		*/
		void setSalida(string);

		/** \brief ejecutar().
		*
		* Este método inicia el proceso de crear lienzo y el flujo de control de este.
		*
		* \return El método no devuelve nada.
		*/
		void ejecutar();
		
	private:

		/** \brief instancia tipo static DibujoSVG*.
		 *
		 * Puntero estático a objeto DibujoSVG.
		 */
		static DibujoSVG* instancia;
		/** \brief fentrada  tipo string.
		 *
		 * Contendrá el nombre del fichero de entrada
		 */
		string fentrada;

		/** \brief fsalida  tipo string.
		 *
		 * Contendrá el nombre del fichero de salida.
		 */
		string fsalida;
		/** \brief lienzo tipo Lienzo
		 *
		 * Un objeto de la clase Lienzo
		 */
		Lienzo lienzo;

		/** \brief Constructor.
		 *
		 * Constructor de DibujoSVG, ubicado en la parte privada de la clase.
		 *
		 * \return No devuelve nada.
		 */
		DibujoSVG();
		
		
};

#endif
